🎖️GitЯра🎖️
src/helpers/RegionMap.cpp 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 10.91 KB
Tff7b72#Tff7b72include T8b949e"RegionMap.h"
Tff7b72#Tff7b72include T8b949e<helpers/TxtDataHelpers.h>
Tff7b72#Tff7b72include T8b949e<SHA256.h>
T8b949e// helper class for region map exporter, we emulate Stream with a safe buffer writer.
Tff7b72class T56d364BufStream Tff7b72: Tff7b72public Te6edf3Stream Tb4b4b4{
Tff7b72publicTff7b72:
Te6edf3BufStreamTb4b4b4(Tffa657char Tff7b72*Te6edf3bufTb4b4b4, Tffa657size_t Te6edf3max_lenTb4b4b4)
Tff7b72: Te6edf3_bufTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4, Te6edf3_max_lenTb4b4b4(Te6edf3max_lenTb4b4b4)Tb4b4b4, Te6edf3_posTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_max_len Tff7b72> T79c0ff0Tb4b4b4) Te6edf3_bufTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3writeTb4b4b4(Tffa657uint8_t Te6edf3cTb4b4b4) Tff7b72override Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_pos Tff7b72+ T79c0ff1 Tff7b72>Tff7b72= Te6edf3_max_lenTb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Te6edf3_bufTb4b4b4[Te6edf3_posTff7b72+Tff7b72+Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4;
Te6edf3_bufTb4b4b4[Te6edf3_posTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72return T79c0ff1Tb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3writeTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tff7b72override Tb4b4b4{
Tffa657size_t Te6edf3written Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3written Tff7b72< Te6edf3sizeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3writeTb4b4b4(Te6edf3bufferTb4b4b4[Te6edf3writtenTb4b4b4]Tb4b4b4)Tb4b4b4) Tff7b72breakTb4b4b4;
Te6edf3writtenTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3writtenTb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3availableTb4b4b4(Tb4b4b4) Tff7b72override Tb4b4b4{ Tff7b72return T79c0ff0Tb4b4b4; Tb4b4b4}
Tffa657int Te6edf3readTb4b4b4(Tb4b4b4) Tff7b72override Tb4b4b4{ Tff7b72return T79c0ff-1Tb4b4b4; Tb4b4b4}
Tffa657int Te6edf3peekTb4b4b4(Tb4b4b4) Tff7b72override Tb4b4b4{ Tff7b72return T79c0ff-1Tb4b4b4; Tb4b4b4}
Tffa657void Te6edf3flushTb4b4b4(Tb4b4b4) Tff7b72override Tb4b4b4{Tb4b4b4}
Tffa657size_t Te6edf3lengthTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3_posTb4b4b4; Tb4b4b4}
Tff7b72privateTff7b72:
Tffa657char Tff7b72*Te6edf3_bufTb4b4b4;
Tffa657size_t Te6edf3_max_lenTb4b4b4;
Tffa657size_t Te6edf3_posTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3RegionMapTb4b4b4(Te6edf3TransportKeyStoreTff7b72& Te6edf3storeTb4b4b4) Tff7b72: Te6edf3_storeTb4b4b4(Tff7b72&Te6edf3storeTb4b4b4) Tb4b4b4{
Te6edf3next_id Tff7b72= T79c0ff1Tb4b4b4; Te6edf3num_regions Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3default_id Tff7b72= Te6edf3home_id Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wildcardTb4b4b4.Te6edf3id Tff7b72= Te6edf3wildcardTb4b4b4.Te6edf3parent Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wildcardTb4b4b4.Te6edf3flags Tff7b72= T79c0ff0Tb4b4b4; T8b949e// default behaviour, allow flood and direct
Te6edf3strcpyTb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3nameTb4b4b4, Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3is_name_charTb4b4b4(Tffa657uint8_t Te6edf3cTb4b4b4) Tb4b4b4{
T8b949e// accept all alpha-num or accented characters, but exclude most punctuation chars
Tff7b72return Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff-Ta5d6ff' Tff7b72|Tff7b72| Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff$Ta5d6ff' Tff7b72|Tff7b72| Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff' Tff7b72|Tff7b72| Tb4b4b4(Te6edf3c Tff7b72>Tff7b72= Ta5d6ff'Ta5d6ff0Ta5d6ff' Tff7b72&Tff7b72& Te6edf3c Tff7b72<Tff7b72= Ta5d6ff'Ta5d6ff9Ta5d6ff'Tb4b4b4) Tff7b72|Tff7b72| Te6edf3c Tff7b72>Tff7b72= Ta5d6ff'Ta5d6ffATa5d6ff'Tb4b4b4;
Tb4b4b4}
Tff7b72static Tff7b72const Tffa657charTff7b72* Te6edf3skip_hashTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3nameTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72*Te6edf3name Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff' Tff7b72? Te6edf3name Tff7b72+ T79c0ff1 Tff7b72: Te6edf3nameTb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3File Te6edf3openWriteTb4b4b4(Te6edf3FILESYSTEMTff7b72* Te6edf3_fsTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3filenameTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
Te6edf3_fsTff7b72-Tff7b72>Te6edf3removeTb4b4b4(Te6edf3filenameTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_fsTff7b72-Tff7b72>Te6edf3openTb4b4b4(Te6edf3filenameTb4b4b4, Te6edf3FILE_O_WRITETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif defined(RP2040_PLATFORM)
Tff7b72return Te6edf3_fsTff7b72-Tff7b72>Te6edf3openTb4b4b4(Te6edf3filenameTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72return Te6edf3_fsTff7b72-Tff7b72>Te6edf3openTb4b4b4(Te6edf3filenameTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Tffa657trueTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657bool Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3loadTb4b4b4(Te6edf3FILESYSTEMTff7b72* Te6edf3_fsTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_fsTff7b72-Tff7b72>Te6edf3existsTb4b4b4(Te6edf3path Tff7b72? Te6edf3path Tff7b72: Ta5d6ff"Ta5d6ff/regions2Ta5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if defined(RP2040_PLATFORM)
Te6edf3File Te6edf3file Tff7b72= Te6edf3_fsTff7b72-Tff7b72>Te6edf3openTb4b4b4(Te6edf3path Tff7b72? Te6edf3path Tff7b72: Ta5d6ff"Ta5d6ff/regions2Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3File Te6edf3file Tff7b72= Te6edf3_fsTff7b72-Tff7b72>Te6edf3openTb4b4b4(Te6edf3path Tff7b72? Te6edf3path Tff7b72: Ta5d6ff"Ta5d6ff/regions2Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3fileTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3padTb4b4b4[T79c0ff128Tb4b4b4]Tb4b4b4;
Te6edf3num_regions Tff7b72= T79c0ff0Tb4b4b4; Te6edf3next_id Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3default_id Tff7b72= Te6edf3home_id Tff7b72= T79c0ff0Tb4b4b4;
Tffa657bool Te6edf3success Tff7b72= Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Te6edf3padTb4b4b4, T79c0ff3Tb4b4b4) Tff7b72=Tff7b72= T79c0ff3Tb4b4b4; T8b949e// reserved header
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3default_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3default_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3default_idTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3home_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3home_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3home_idTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3next_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3next_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3next_idTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3successTb4b4b4) Tb4b4b4{
Tff7b72while Tb4b4b4(Te6edf3num_regions Tff7b72< Te6edf3MAX_REGION_ENTRIESTb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3r Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3num_regionsTb4b4b4]Tb4b4b4;
Tffa657int Te6edf3n Tff7b72= Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3n Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72breakTb4b4b4; T8b949e// clean EOF
Te6edf3success Tff7b72= Tb4b4b4(Te6edf3n Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3readTb4b4b4(Te6edf3padTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3padTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3padTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3successTb4b4b4) Tff7b72breakTb4b4b4; T8b949e// partial read or corruption
Tff7b72if Tb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3id Tff7b72>Tff7b72= Te6edf3next_idTb4b4b4) Tb4b4b4{ T8b949e// make sure next_id is valid
Te6edf3next_id Tff7b72= Te6edf3rTff7b72-Tff7b72>Te6edf3id Tff7b72+ T79c0ff1Tb4b4b4;
Tb4b4b4}
Te6edf3num_regionsTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3fileTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3successTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4; T8b949e// failed
Tb4b4b4}
Tffa657bool Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3saveTb4b4b4(Te6edf3FILESYSTEMTff7b72* Te6edf3_fsTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3pathTb4b4b4) Tb4b4b4{
Te6edf3File Te6edf3file Tff7b72= Te6edf3openWriteTb4b4b4(Te6edf3_fsTb4b4b4, Te6edf3path Tff7b72? Te6edf3path Tff7b72: Ta5d6ff"Ta5d6ff/regions2Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fileTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3padTb4b4b4[T79c0ff128Tb4b4b4]Tb4b4b4;
Te6edf3memsetTb4b4b4(Te6edf3padTb4b4b4, T79c0ff0Tb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3padTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657bool Te6edf3success Tff7b72= Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3padTb4b4b4, T79c0ff3Tb4b4b4) Tff7b72=Tff7b72= T79c0ff3Tb4b4b4; T8b949e// reserved header
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3default_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3default_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3default_idTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3home_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3home_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3home_idTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flagsTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3next_idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3next_idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3next_idTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3successTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3r Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3idTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3parentTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_t Tff7b72*Tb4b4b4) Tff7b72&Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3flagsTb4b4b4)Tb4b4b4;
Te6edf3success Tff7b72= Te6edf3success Tff7b72&Tff7b72& Te6edf3fileTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3padTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3padTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3padTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3successTb4b4b4) Tff7b72breakTb4b4b4; T8b949e// write failed
Tb4b4b4}
Tb4b4b4}
Te6edf3fileTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3successTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4; T8b949e// failed
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3putRegionTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3nameTb4b4b4, Tffa657uint16_t Te6edf3parent_idTb4b4b4, Tffa657uint16_t Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72const Tffa657charTff7b72* Te6edf3sp Tff7b72= Te6edf3nameTb4b4b4; T8b949e// check for illegal name chars
Tff7b72while Tb4b4b4(Tff7b72*Te6edf3spTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3is_name_charTb4b4b4(Tff7b72*Te6edf3spTb4b4b4)Tb4b4b4) Tff7b72return Tffa657NULLTb4b4b4; T8b949e// error
Te6edf3spTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72auto Te6edf3region Tff7b72= Te6edf3findByNameTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3regionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3id Tff7b72=Tff7b72= Te6edf3parent_idTb4b4b4) Tff7b72return Tffa657NULLTb4b4b4; T8b949e// ERROR: invalid parent!
Te6edf3regionTff7b72-Tff7b72>Te6edf3parent Tff7b72= Te6edf3parent_idTb4b4b4; T8b949e// re-parent / move this region in the hierarchy
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3id Tff7b72=Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3num_regions Tff7b72>Tff7b72= Te6edf3MAX_REGION_ENTRIESTb4b4b4) Tff7b72return Tffa657NULLTb4b4b4; T8b949e// full!
Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3num_regionsTff7b72+Tff7b72+Tb4b4b4]Tb4b4b4; T8b949e// alloc new RegionEntry
Te6edf3regionTff7b72-Tff7b72>Te6edf3flags Tff7b72= Te6edf3REGION_DENY_FLOODTb4b4b4; T8b949e// DENY by default
Te6edf3regionTff7b72-Tff7b72>Te6edf3id Tff7b72= Te6edf3id Tff7b72=Tff7b72= T79c0ff0 Tff7b72? Te6edf3next_idTff7b72+Tff7b72+ Tff7b72: Te6edf3idTb4b4b4;
Te6edf3StrHelperTff7b72:Tff7b72:Te6edf3strncpyTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4, Te6edf3nameTb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3regionTff7b72-Tff7b72>Te6edf3parent Tff7b72= Te6edf3parent_idTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3regionTb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3getTransportKeysForTb4b4b4(Tff7b72const Te6edf3RegionEntryTff7b72& Te6edf3srcTb4b4b4, Te6edf3TransportKey Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657int Te6edf3max_numTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3numTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3srcTb4b4b4.Te6edf3nameTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff$Ta5d6ff'Tb4b4b4) Tb4b4b4{ T8b949e// private region
Te6edf3num Tff7b72= Te6edf3_storeTff7b72-Tff7b72>Te6edf3loadKeysForTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3idTb4b4b4, Te6edf3destTb4b4b4, Te6edf3max_numTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3srcTb4b4b4.Te6edf3nameTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff'Tb4b4b4) Tb4b4b4{ T8b949e// auto hashtag region
Te6edf3_storeTff7b72-Tff7b72>Te6edf3getAutoKeyForTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3idTb4b4b4, Te6edf3srcTb4b4b4.Te6edf3nameTb4b4b4, Te6edf3destTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3num Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{ T8b949e// new: implicit auto hashtag region
Tffa657char Te6edf3tmpTb4b4b4[Tff7b72sizeofTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3nameTb4b4b4)Tff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3tmpTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff'Tb4b4b4;
Te6edf3strcpyTb4b4b4(Tff7b72&Te6edf3tmpTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3srcTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4;
Te6edf3_storeTff7b72-Tff7b72>Te6edf3getAutoKeyForTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3idTb4b4b4, Te6edf3tmpTb4b4b4, Te6edf3destTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3num Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3numTb4b4b4;
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3findMatchTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3packetTb4b4b4, Tffa657uint8_t Te6edf3maskTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3flags Tff7b72& Te6edf3maskTb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ T8b949e// does region allow this? (per 'mask' param)
Te6edf3TransportKey Te6edf3keysTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4;
Tffa657int Te6edf3num Tff7b72= Te6edf3getTransportKeysForTb4b4b4(Tff7b72*Te6edf3regionTb4b4b4, Te6edf3keysTb4b4b4, T79c0ff4Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3j Tff7b72= T79c0ff0Tb4b4b4; Te6edf3j Tff7b72< Te6edf3numTb4b4b4; Te6edf3jTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3code Tff7b72= Te6edf3keysTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4.Te6edf3calcTransportCodeTb4b4b4(Te6edf3packetTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3packetTff7b72-Tff7b72>Te6edf3transport_codesTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= Te6edf3codeTb4b4b4) Tb4b4b4{ T8b949e// a match!!
Tff7b72return Te6edf3regionTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657NULLTb4b4b4; T8b949e// no matches
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3findByNameTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3nameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3nameTb4b4b4, Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Tff7b72&Te6edf3wildcardTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72*Te6edf3name Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff'Tb4b4b4) Tb4b4b4{ Te6edf3nameTff7b72+Tff7b72+Tb4b4b4; Tb4b4b4} T8b949e// ignore the '#' when matching by name
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Te6edf3regionTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657NULLTb4b4b4; T8b949e// not found
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3findByNamePrefixTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3prefixTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3prefixTb4b4b4, Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Tff7b72&Te6edf3wildcardTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72*Te6edf3prefix Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff#Ta5d6ff'Tb4b4b4) Tb4b4b4{ Te6edf3prefixTff7b72+Tff7b72+Tb4b4b4; Tb4b4b4} T8b949e// ignore the '#' when matching by name
Te6edf3RegionEntryTff7b72* Te6edf3partial Tff7b72= Tffa657NULLTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3prefixTb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Te6edf3regionTb4b4b4; T8b949e// is a complete match, preference this one
Tff7b72if Tb4b4b4(Te6edf3memcmpTb4b4b4(Te6edf3prefixTb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3strlenTb4b4b4(Te6edf3prefixTb4b4b4)Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3partial Tff7b72= Te6edf3regionTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3partialTb4b4b4;
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3findByIdTb4b4b4(Tffa657uint16_t Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3id Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Tff7b72&Te6edf3wildcardTb4b4b4; T8b949e// special root Region
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3id Tff7b72=Tff7b72= Te6edf3idTb4b4b4) Tff7b72return Te6edf3regionTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657NULLTb4b4b4; T8b949e// not found
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3getHomeRegionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3findByIdTb4b4b4(Te6edf3home_idTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3setHomeRegionTb4b4b4(Tff7b72const Te6edf3RegionEntryTff7b72* Te6edf3homeTb4b4b4) Tb4b4b4{
Te6edf3home_id Tff7b72= Te6edf3home Tff7b72? Te6edf3homeTff7b72-Tff7b72>Te6edf3id Tff7b72: T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3RegionEntryTff7b72* Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3getDefaultRegionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3default_id Tff7b72=Tff7b72= T79c0ff0 Tff7b72? Tffa657NULL Tff7b72: Te6edf3findByIdTb4b4b4(Te6edf3default_idTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3setDefaultRegionTb4b4b4(Tff7b72const Te6edf3RegionEntryTff7b72* Te6edf3defTb4b4b4) Tb4b4b4{
Te6edf3default_id Tff7b72= Te6edf3def Tff7b72? Te6edf3defTff7b72-Tff7b72>Te6edf3id Tff7b72: T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3removeRegionTb4b4b4(Tff7b72const Te6edf3RegionEntryTff7b72& Te6edf3regionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3regionTb4b4b4.Te6edf3id Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return Tffa657falseTb4b4b4; T8b949e// failed (cannot remove the wildcard Region)
Tffa657int Te6edf3iTb4b4b4; T8b949e// first check region has no child regions
Tff7b72for Tb4b4b4(Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3parent Tff7b72=Tff7b72= Te6edf3regionTb4b4b4.Te6edf3idTb4b4b4) Tff7b72return Tffa657falseTb4b4b4; T8b949e// failed (must remove child Regions first)
Tb4b4b4}
Te6edf3i Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3regionTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3idTb4b4b4) Tff7b72breakTb4b4b4;
Te6edf3iTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3i Tff7b72>Tff7b72= Te6edf3num_regionsTb4b4b4) Tff7b72return Tffa657falseTb4b4b4; T8b949e// failed (not found)
Te6edf3num_regionsTff7b72-Tff7b72-Tb4b4b4; T8b949e// remove from regions array
Tff7b72while Tb4b4b4(Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4) Tb4b4b4{
Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3regionsTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3iTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4; T8b949e// success
Tb4b4b4}
Tffa657bool Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3clearTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3num_regions Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4; T8b949e// success
Tb4b4b4}
Tffa657void Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3printChildRegionsTb4b4b4(Tffa657int Te6edf3indentTb4b4b4, Tff7b72const Te6edf3RegionEntryTff7b72* Te6edf3parentTb4b4b4, Te6edf3StreamTff7b72& Te6edf3outTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3indentTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3outTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff'Ta5d6ff Ta5d6ff'Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3parentTff7b72-Tff7b72>Te6edf3flags Tff7b72& Te6edf3REGION_DENY_FLOODTb4b4b4) Tb4b4b4{
Te6edf3outTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%s%sTffea00\nTa5d6ff"Tb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3parentTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3parentTff7b72-Tff7b72>Te6edf3id Tff7b72=Tff7b72= Te6edf3home_id Tff7b72? Ta5d6ff"Ta5d6ff^Ta5d6ff" Tff7b72: Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3outTb4b4b4.Te6edf3printfTb4b4b4(Ta5d6ff"Ta5d6ff%s%s FTffea00\nTa5d6ff"Tb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3parentTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3parentTff7b72-Tff7b72>Te6edf3id Tff7b72=Tff7b72= Te6edf3home_id Tff7b72? Ta5d6ff"Ta5d6ff^Ta5d6ff" Tff7b72: Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3r Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3rTff7b72-Tff7b72>Te6edf3parent Tff7b72=Tff7b72= Te6edf3parentTff7b72-Tff7b72>Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3printChildRegionsTb4b4b4(Te6edf3indent Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3rTb4b4b4, Te6edf3outTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3exportToTb4b4b4(Te6edf3StreamTff7b72& Te6edf3outTb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3printChildRegionsTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72&Te6edf3wildcardTb4b4b4, Te6edf3outTb4b4b4)Tb4b4b4; T8b949e// recursive
Tb4b4b4}
Tffa657size_t Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3exportToTb4b4b4(Tffa657char Tff7b72*Te6edf3destTb4b4b4, Tffa657size_t Te6edf3max_lenTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3dest Tff7b72|Tff7b72| Te6edf3max_len Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return T79c0ff0Tb4b4b4;
Te6edf3BufStream Td2a8ffbsTb4b4b4(Te6edf3destTb4b4b4, Te6edf3max_lenTb4b4b4)Tb4b4b4;
Te6edf3exportToTb4b4b4(Te6edf3bsTb4b4b4)Tb4b4b4; T8b949e// ← reuse existing logic
Tff7b72return Te6edf3bsTb4b4b4.Te6edf3lengthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3RegionMapTff7b72:Tff7b72:Te6edf3exportNamesToTb4b4b4(Tffa657char Tff7b72*Te6edf3destTb4b4b4, Tffa657int Te6edf3max_lenTb4b4b4, Tffa657uint8_t Te6edf3maskTb4b4b4, Tffa657bool Te6edf3invertTb4b4b4) Tb4b4b4{
Tffa657char Tff7b72*Te6edf3dp Tff7b72= Te6edf3destTb4b4b4;
T8b949e// Check wildcard region
Tffa657bool Te6edf3wildcard_matches Tff7b72= Te6edf3invert Tff7b72? Tb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flags Tff7b72& Te6edf3maskTb4b4b4) Tff7b72: Tff7b72!Tb4b4b4(Te6edf3wildcardTb4b4b4.Te6edf3flags Tff7b72& Te6edf3maskTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wildcard_matchesTb4b4b4) Tb4b4b4{
Tff7b72*Te6edf3dpTff7b72+Tff7b72+ Tff7b72= Ta5d6ff'Ta5d6ff*Ta5d6ff'Tb4b4b4;
Tff7b72*Te6edf3dpTff7b72+Tff7b72+ Tff7b72= Ta5d6ff'Ta5d6ff,Ta5d6ff'Tb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3num_regionsTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72auto Te6edf3region Tff7b72= Tff7b72&Te6edf3regionsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
T8b949e// Check if region matches the filter criteria
Tffa657bool Te6edf3region_matches Tff7b72= Te6edf3invert Tff7b72? Tb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3flags Tff7b72& Te6edf3maskTb4b4b4) Tff7b72: Tff7b72!Tb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3flags Tff7b72& Te6edf3maskTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3region_matchesTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3len Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3skip_hashTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3dp Tff7b72- Te6edf3destTb4b4b4) Tff7b72+ Te6edf3len Tff7b72+ T79c0ff2 Tff7b72< Te6edf3max_lenTb4b4b4) Tb4b4b4{ T8b949e// only append if name will fit
Te6edf3memcpyTb4b4b4(Te6edf3dpTb4b4b4, Te6edf3skip_hashTb4b4b4(Te6edf3regionTff7b72-Tff7b72>Te6edf3nameTb4b4b4)Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3dp Tff7b72+Tff7b72= Te6edf3lenTb4b4b4;
Tff7b72*Te6edf3dpTff7b72+Tff7b72+ Tff7b72= Ta5d6ff'Ta5d6ff,Ta5d6ff'Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3dp Tff7b72> Te6edf3destTb4b4b4) Tb4b4b4{ Te6edf3dpTff7b72-Tff7b72-Tb4b4b4; Tb4b4b4} T8b949e// don't include trailing comma
Tff7b72*Te6edf3dp Tff7b72= T79c0ff0Tb4b4b4; T8b949e// set null terminator
Tff7b72return Te6edf3dp Tff7b72- Te6edf3destTb4b4b4; T8b949e// return length
Tb4b4b4}
Served by rngit 1.5.1 - Generated in 0.17s